#encoding=utf-8

"""
这里在python处理cookie,一般通过cookielib模块和urllib2模块的HTTPCookieProcessor处理器类一起使用: cookielib模块主要作用是提供用于存储cookie的对象,那啥处理器是用来处理这些cookie对象并构建handler对象.
cookielib库提供了CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar对象.但是一般直接使用CookieJar,需要和本地文件交互的则使用后两者,后两个和本地文件交互的代码这里略过,详见SpiderBook.pdf/找度娘
这个测试案例比较简单,若想做通用的模拟登录还得选别的技术,如用内置浏览器引擎的爬虫(Selenium/PhantomJS等)
模拟登录(个人觉得就是登录,反正是调用了接口)的注意事项:
	1.登录一般都会先有一个HTTP GET,用于拉取一些信息及获取Cookie,然后HTTP POST登录
	2.HTTP POST登录的链接有可能是动态的,从GET返回的信息中获取
	3.大多数网站的登录整体流程是类似的,可能有些细节不一样,因此也不保证成功登录其他网站

"""

import urllib
import urllib2
import cookielib


def send_request():
	post_url = "http://www.renren.com/PLogin.do"
	headers = {
		"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
	}
	form_dict = {
		"email" : "mr_mao_hacker@163.com",
	        "password" : "ALARMCHIME"
	}
	form_data = urllib.urlencode(form_dict)
	request = urllib2.Request(post_url, data=form_data, headers=headers)
	
	#构建一个可以存储cookie的cookiejar对象
	cookie_jar = cookielib.CookieJar()
	#使用cookiejar对象,构建可以处理cookie的处理器对象
	cookie_handler = urllib2.HTTPCookieProcessor(cookie_jar)
	#使用处理器对象,构建opener
	opener = urllib2.build_opener(cookie_handler)
	
	#这里也可以采用addheaders()方法添加头信息headers,addheaders接受一个列表,里面的元素都是一个headers信息的元组
	#opener.addheaders = [(键,值)]	

	#通过opener发送post登录请求,就可以记录cookie
	opener.open(request)
	
	#可以按标准格式将保存的cookie打印出来
	cookieStr = ""
	for item in cookie_jar:
		cookieStr = cookieStr + item.name + "=" + item.value + ";"
	#舍去最后一位的分号
	print(cookieStr[:-1])

	url_list = [
		"http://www.renren.com/327550029/profile",
	    "http://www.renren.com/410043129/profile"
	]
	
	for index, url in enumerate(url_list):
		request = urllib2.Request(url, headers=headers)
		#response = urllib2.urlopen(request)  #使用自带的opener
		response = opener.open(request)
		with open(str(index)+".html", 'w') as f:
			f.write(response.read())


if __name__ == "__main__":
	send_request()

